package com.jwsoft.manager.core.integration;

import com.bifang.assistant.common.vo.BaseVO;
import com.bifang.module.base.common.vo.excel.ExcelReadVO;
import com.bifang.module.base.common.vo.excel.ExcelVO;
import com.github.pagehelper.PageInfo;
import com.jwsoft.manager.common.vo.YwApply.EnrollCheckShLqVO;
import com.jwsoft.manager.common.vo.eduFormEnroll.EduConfigNameAliasVO;
import com.jwsoft.manager.common.vo.eduFormEnroll.EduEnrollSchoolChooseHouseVO;
import com.jwsoft.manager.common.vo.eduFormEnroll.EduEnrollSchoolFileVO;
import com.jwsoft.manager.common.vo.eduSchoolConfig.SchoolConfigQueryVO;
import com.jwsoft.manager.common.vo.eduSchoolConfig.SchoolConfigVO;
import com.jwsoft.manager.common.vo.eduSocialSecurity.EduSocialSecurityQueryVO;
import com.jwsoft.manager.common.vo.eduSocialSecurityDetail.EduSocialSecurityDetailVO;
import com.jwsoft.manager.common.vo.eduStudentEnroll.*;
import com.jwsoft.manager.common.vo.eduStudentEnrollPre.EduStudentEnrollPreKeyVO;
import com.jwsoft.manager.common.vo.eduStudentEnrollPre.EduStudentEnrollPreVO;
import com.jwsoft.manager.common.vo.eduStudentEnrollVerification.EduStudentEnrollVerificationVO;
import com.jwsoft.manager.core.dao.model.EduStudentEnrollPre;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.util.List;

/**
 * 学生报名业务本地接口
 *
 * @author wangtao
 * @since 2022-12-05
 */
public interface EduStudentEnrollJhIntegration {
    /** 分页查询 民办公办一起报名，一次只能报一所 金华模式*/
    PageInfo<EduStudentEnrollVO> getList(EduStudentEnrollQueryVO vo);

    //学生报名撤销分页查询-金华模式
    PageInfo<EduStudentEnrollVO> getQuashList(EduStudentEnrollQueryVO vo);

    //教育局查询单个学生报名信息-金华模式
    PageInfo<EduStudentEnrollVO> getListByJyj(EduStudentEnrollQueryVO vo);
    /** 根据主键查询详情 */
    EduStudentEnrollVO getById(EduStudentEnrollKeyVO vo);
    //根据学段和登录人信息 获取预采集人员
    List<BmStudentVO> getPreListByToken(BmQueryVO vo);
    /** 根据预报名id 查询可报名信息 */
    EduStudentEnrollPreVO getBeforeByPreId(EduStudentEnrollPreKeyVO vo);
    EduStudentEnrollPreVO getBeforeByPreIdResubmit(EduStudentEnrollPreKeyVO vo);

    /**
     * 根据家长身份证查询可报名信息
     */
    List<EduStudentEnrollPreVO> getBeforeBatch(BmQueryVO vo);
    /** 保存前统一校验*/
    void checkSave(SaveStudentEnrollVO vo);
    /** 新增 */
    SaveStudentEnrollVO add(SaveStudentEnrollVO vo);
    /**线下录入导入模板下载**/
    void downloadModel(ExcelVO vo, HttpServletResponse response);
    /**线下录入excel导入保存**/
    ExcelReadVO readExcel(ExcelVO vo, MultipartFile file);
    /** 家长端报名 */
    SaveStudentEnrollVO saveEnrollApp(SaveStudentEnrollVO vo);
    /** 家长端重新提交材料 */
    void resubmitEnrollApp(ResubmitStudentEnrollVO vo);
    /** 学校或管理员驳回 */
    void resubmitBh(EduStudentEnrollBhVO vo);
    /** 修改 */
    EduStudentEnrollVO edit(EduStudentEnrollVO vo);
    /** 根据主键删除 */
    void del(EduStudentEnrollKeyVO vo);
    /**
     * 判断登录账号是否学生
     * */
    Boolean UserIsStudent(BaseVO vo);
    /**
     * 判断是否可以摇号绑定
     * */
    List<BindEnrollVO> checkBind(BindEnrollQueryVO vo);
    /***
     * 我的报名查询
     * */
    List<MyYearEnrollVO> getMyEnrollInfo(MyEnrollQueryVO vo);
    //校验报名情况
    Boolean checkEnroll(YjbmQueryVO vo);

    Boolean checkEnroll(EduStudentEnrollPre eduStudentEnrollPre);

    Boolean checkEnroll(String idcard, Integer year);

    void checkYhExp(EduStudentEnrollQueryVO vo);

    EduStudentEnrollPre getPre(String studentEnrollPreId, String idcard);

    /**
     * excel数据导出
     * */
    void exportYwMzgApplyInfo(EduStudentEnrollQueryVO vo, HttpServletResponse response);

    YwMbApplyFileVO inputYwMzgApplyInfo(YwMbApplyFileVO vo, MultipartFile file);


    //获取查询是否在审核录取操作期内 金华模式
    Boolean checkShLq(EnrollCheckShLqVO vo);
    EduStudentEnrollVO getYwApplyDetail(EduStudentEnrollKeyVO vo);

    EduStudentEnrollVO getYwApplyById(EduStudentEnrollKeyVO vo);

    //回退到待审核
    void backAuth(EduStudentEnrollKeyVO vo);


    //报名退回 删除 民办和公办单独
    void ywApplyBackDg(EduStudentEnrollKeyVO vo);
    //家长端报名退回 删除
    void ywApplyBackApp(EduStudentEnrollKeyVO vo);
    void updateEnrollStatus(UpdateEnrollStatusVO vo);

    //根据身份证查询报名数据
    PageInfo<EduStudentEnrollVO> getYwApplyInfoByIdcard(EduStudentEnrollQueryVO vo);

    void exportYwApplyInfo(EduStudentEnrollQueryVO vo, HttpServletResponse response);

    PageInfo<EduStudentEnrollVO> getYwApplyList(EduStudentEnrollQueryVO vo);

    //报名人数情况查询
    StudentEnrollCntVO queryBmCnt(EduStudentEnrollQueryVO vo);

    void batchMzgAdmit(StudentEnrollBatchVO vo);

    void batchAdmit(StudentEnrollBatchVO vo);

    void ywMzgStop(StudentEnrollStopVO vo);

    //义务民转公初审
    void ywMzgAudit(StudentEnrollSaveVO vo);

    void checkSh(EnrollCheckShLqVO vo);

    void checklq(EnrollCheckShLqVO vo);

    StudentEnrollLqVO ywMzgApply(StudentEnrollSaveVO vo);
    //教育局复审
    void ywReview(StudentEnrollSaveVO vo);
    //教育局单个录取
    StudentEnrollLqVO ywAdmit(StudentEnrollSaveVO vo);
    //教育局批量录取
    StudentEnrollLqVO ywAdmitBatch(StudentEnrollSaveVO vo);
    void exportYwMbApplyInfo(EduStudentEnrollQueryVO vo, HttpServletResponse response);

    YwMbApplyFileVO inputYwMbApplyInfo(YwMbApplyFileVO vo, MultipartFile file);

    void ywMbStop(StudentEnrollStopVO vo);
    //义务民办初审
    void ywMbAudit(StudentEnrollSaveVO vo);

    StudentEnrollLqVO ywMbApply(StudentEnrollSaveVO vo);

    PageInfo<EduStudentEnrollVO> getYwGbApplyInfo(EduStudentEnrollQueryVO vo);

    void ywGbAudit(StudentEnrollSaveVO vo);

    StudentEnrollLqVO ywGbApply(StudentEnrollSaveVO vo);

    void exportYwGbApplyInfo(EduStudentEnrollQueryVO vo, HttpServletResponse response);

    void ywGbStop(StudentEnrollStopVO vo);

    //根据学校id获取配置信息
    List<SchoolConfigVO> querySchoolConfigBySchoolId(SchoolConfigQueryVO vo);

    //学校录取报名人员
    void schoolAddEnroll(SaveStudentEnrollVO vo);

    PageInfo<EduStudentEnrollVO> getEnrollLottery(EduStudentEnrollQueryVO vo);

    void exportEnrollLottery(EduStudentEnrollQueryVO vo, HttpServletResponse response);
    /**摇号导出人员缓存清除*/
    void clearEnrollLotteryCache(EduStudentEnrollQueryVO vo);

    void clearYwEnrollCache(EduStudentEnrollQueryVO vo);

    /**
     * 学生线下录入学生修改
     * @param vo
     * @return
     */
    EduStudentEnrollVO editStudentEnrollBySchool(SaveStudentEnrollVO vo);

    PageInfo<EduStudentEnrollVO> getJyjYwBmApplyInfo(EduStudentEnrollQueryVO vo);

    void verificationAudit(EduStudentEnrollVerificationVO vo);

    PageInfo<EduStudentEnrollVO> getYwMbApplyInfo(EduStudentEnrollQueryVO vo);

    PageInfo<EduStudentEnrollVO> getYwMzgApplyInfo(EduStudentEnrollQueryVO vo);

    void ywAuthBatch(StudentEnrollSaveVO vo);

    void ywReviewAuthBatch(StudentEnrollSaveVO vo);

    PageInfo<EduSocialSecurityDetailVO> getSocialSecurityDetail(EduSocialSecurityQueryVO vo);

    void updateConfigNameByEnrollId(EduConfigNameAliasVO vo);
    /**
     * 学校补充材料
     * */
    void upSchoolFileById(EduEnrollSchoolFileVO vo);
    /**
     * 学校选择房产
     * */
    void schoolChooseHouse(EduEnrollSchoolChooseHouseVO vo);

    void mbBatchAdmission(StudentEnrollSaveVO vo);

    void mzgBatchAdmission(StudentEnrollSaveVO vo);

    void exportEnrollInfo(EduStudentEnrollQueryVO vo, HttpServletResponse response);

    /**
     * 学校退回一步
     * @param vo
     */
    void ywApplySchoolBackAuth(EduStudentEnrollKeyVO vo);

    /**
     * 教育局退回
     * @param vo
     */
    void ywApplyJyjBackAuth(EduStudentEnrollKeyVO vo);

    Boolean primaryAndJuniorAuthPower(EduStudentEnrollPreKeyVO vo);

    UserAreaVO getEnrollArea(EduStudentEnrollPreKeyVO vo);
}
